package xiyuan.keywords;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import oauth2.Log;

import weibo4j.Users;
import weibo4j.Weibo;
import weibo4j.model.Status;
import weibo4j.model.User;
import weibo4j.model.WeiboException;
import xiyuan.data.DatabaseUtil;
import xiyuan.exception.NoKeywordsException;
import xiyuan.keywords.split.SplitWord;
import xiyuan.keywords.split.Word;
import xiyuan.keywords.tfidf.KeyWord;
import xiyuan.keywords.tfidf.TfidfTool;
import xiyuan.localio.LocalWriter;
import xiyuan.localio.UidReader;
import xiyuan.view.distance.DistanceGenerator;
import xiyuan.view.distance.NormalizedDistance;
import xiyuan.weibo.WeiboUtil;

//我写的是通过文件io获得一批uid,然后从这些uid获得各自的好友，存在map里，在逐个好友获取微博
//我觉得这个uid一次不能太多。。
public class KeywordsGenerator {
	// 通过一个用户id获得他的好友的id
	public static void main(String[] args) throws IOException {
		String access_token = args[0];
		Weibo weibo = new Weibo();
		weibo.setToken(access_token);

		// 这里用来存放的数据结构是map
		// 但是我想map肯定不能存很多uid的好友，因为要考虑到共同的好友之类的。。
		// 但是对于一个uid是肯定没问题的。
		//Map<Long, Long> id_friend = new HashMap<Long, Long>();
		
		// 我觉得这里没有什么必要用map，直接一个list就够了，
		//应该是一个用户处理完才处理下一个用户的
		
		while(UidReader.hasNext()) {
			long uid = UidReader.next();
			DistanceGenerator.getViewInfo(uid, "大学");
		}		
	}

	public static List<KeyWord> generateKeyword(long uidF) {

		List<Status> statuslist = null;
		try {
			statuslist = WeiboUtil.getStstusListByUID(uidF);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		}
		List<Word> wordlist = new ArrayList<Word>();//存储分词结果的分词

		if (statuslist.size()==0)
			return null;
		
		for (Status status : statuslist){
			String text = status.getText();
			System.out.println(text);
			wordlist.addAll(SplitWord.sentenceToWords(text));
		}
		
		//TODO check if the keyword for this user already exist
		// in the database
		// 计算weight，取出前15个关键词
		TfidfTool tfidf = new TfidfTool(wordlist);
		List<KeyWord> keywords =  tfidf.getKeywords(15);
		if (keywords != null){
			DatabaseUtil.writeKeywords(uidF, keywords);
		}
		return keywords;
	}

}
